/**
 * 树定义
*/
#include <stdio.h>
#include <stdlib.h>

#ifndef TREE
#define TREE

#ifndef TreeElementType
#define TreeElementType int
#endif

typedef struct TreeNode *Tree;
typedef struct TreeNode TreeNode;
struct TreeNode {
    TreeElementType data;
    TreeNode *left;
    TreeNode *right;
};

TreeNode* createTreeNode(TreeElementType data) {
    TreeNode* node = calloc(1, sizeof(TreeNode));
    node->data = data;
    return node;
}

void freeTree(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    // if(root->left) {
        freeTree(root->left);
    // }
    // if(root->right) {
        freeTree(root->right);
    // }
    free(root);
}

// 访问树节点时需要完成的操作，一般是输出，
// 这里定义的是函数头，在使用的程序里写具体的实现
void visitTreeNode(TreeNode* node);

#endif
